import { store } from '/@/store/index'
import axios from 'axios'
import { AxiosResponse } from 'axios'
import { ElNotification } from 'element-plus'
import { getLocal } from '/@/utils'
import { IToken } from '../type/store/layout'

let loading:{close():void}
// 创建 axios 实例
const request = axios.create({
    // API 请求的默认前缀
    baseURL: import.meta.env.VITE_APP_BASE_URL as string | undefined,
    timeout: 60000 // 请求超时时间
})
// Vite在一个特殊的import.meta.env对象上暴露环境变量
// import.meta.env.MODE: String 应用运行的环境模式
// import.meta.env.BASE_URL: String 应用正在被部署在的base URL，由base配置项决定
// import.meta.env.PROD: Boolean 应用是否运行在生产环境
// import.meta.env.DEV: Boolean 应用是否运行在开发环境
// 异常拦截处理器
const errorHandler = (error:{message:string}) => {
    loading.close()
    console.log(`err${error}`)
    ElNotification({
        title: '请求失败',
        message: error.message,
        type: 'error'
    })
    return Promise.reject(error)
}

//请求拦截
request.interceptors.request.use(
    config => {
      let tokenCode  = store.state.user.tokenCode
      let token = getLocal<IToken>('token').ACCESS_TOKEN
      config.headers.tokenCode = tokenCode;
      if (token) {
        //将token放到请求头发送给服务器,将tokenkey放在请求头中
        config.headers.token = token;
        return config;
      }
      return config;
    },
    errorHandler
  )
// response interceptor
request.interceptors.response.use((response:AxiosResponse<IResponse>) => {
    const { data } = response
    // loading.close()
    if(!data.IsSuccess) {
        let title = '请求失败'
        if(data.Message == '-1') {
            if (store.state.user.token.ACCESS_TOKEN) {
                store.commit('user/logout')
            }
            title = '身份认证失败'
        }
        ElNotification({
            title,
            message: data.Message,
            type: 'error'
        })
        return Promise.reject(new Error(data.Message || 'Error'))
    }
    return response
}, errorHandler)

export default request